<script setup lang="ts">
import { notification } from 'ant-design-vue';
import { z } from '#/adapter/form';
import { useVbenModal } from '@vben/common-ui';
// import { BasicForm, useForm } from '@vben/ui'; // 移除此行
import { useVbenForm } from '#/adapter/form'; // 添加此行
import { $t } from '@vben/locales';

// TODO: 导入修改密码的 API
// import { changePassword } from '#/api/abp/user';

// 调整模态框和表单的初始化方式
const [BasicModal, modalApi] = useVbenModal({
  title: $t('routes.basic.passwordChange'), // 修改密码
  onConfirm: handleConfirm,
  // 添加 onOpenChange 钩子，用于打开模态框时重置表单
  onOpenChange: (isOpen) => {
    if (isOpen) {
      formApi.resetForm();
    }
  },
});

// 调整表单的初始化方式
const [BasicForm, formApi] = useVbenForm({
  schema: [
    {
      fieldName: 'currentPassword',
      label: $t('routes.basic.currentPassword'), // 当前密码
      component: 'InputPassword',
      rules: z.string().min(1, { message: '请输入当前密码' }),
    },
    {
      fieldName: 'newPassword',
      label: $t('routes.basic.newPassword'), // 新密码
      component: 'InputPassword',
      rules: z.string().min(1, { message: '请输入新密码' }),
    },
    {
      fieldName: 'confirmPassword',
      label: $t('routes.basic.confirmPassword'), // 确认新密码
      component: 'InputPassword',
      dependencies: {
        triggerFields: ['newPassword'],
        rules: (values: Partial<Record<string, any>>) => {
          return z.string()
            .min(6, { message: '密码至少需要6个字符' })
            .regex(/[a-z]/, { message: '密码必须包含至少一个小写字母' })
            .regex(/[A-Z]/, { message: '密码必须包含至少一个大写字母' })
            .regex(/[^a-zA-Z0-9]/, { message: '密码必须包含至少一个特殊字符' })
            .refine(
              (value) => {
                if (!value) {
                  return false;
                }
                return value === values.newPassword;
              },
              {
                message: $t('routes.basic.passwordMismatch'),
                path: ['confirmPassword'],
              }
            );
        },
      },
    },
  ],
});

async function handleConfirm() {
  try {
    const values = await formApi.validate(); // 使用 formApi.validate()
    modalApi.lock(true);

    // TODO: 调用修改密码的 API
    // await changePassword(values); // 调用 API

    notification.success({
      duration: 2,
      message: $t('routes.basic.passwordChangeSuccess'), // 密码修改成功
    });
    modalApi.close();
    // resetFields(); // 移除此行，resetForm 已在 onOpenChange 中处理
  } catch (error) {
    console.error('修改密码失败:', error);
    // TODO: 处理 API 调用失败的错误提示
  } finally {
    modalApi.lock(false);
  }
}

// 移除 handleOpen 函数，逻辑已移至 onOpenChange
// function handleOpen() {
//   resetFields();
// }

defineExpose({
  open: modalApi.open,
});
</script>

<template>
  <BasicModal @open="modalApi.open">
    <BasicForm  />
  </BasicModal>
</template>
